/*
 * @Author: Await
 * @Date: 2025-05-09 19:00:00
 * @LastEditors: Await
 * @LastEditTime: 2025-05-09 19:00:00
 * @Description: 图表配置完整性检查
 */

import { ChartConfig, ChartType } from '../../../types/chartTypes';
import { is3DChartType } from '../../../utils/chart/3dChartUtils';

/**
 * 扩展配置类型，添加_originalType字段
 */
type ExtendedConfig = {
    _originalType?: string;
    textStyle?: any;
    series?: any[];
    radar?: any;
    type?: string;
    grid?: any;
    tooltip?: any;
    [key: string]: any;
};

/**
 * 确保配置具有必要的完整性
 * 根据图表类型添加必要的默认配置
 */
export const ensureConfigCompleteness = (config: ExtendedConfig, isRadar = false): ExtendedConfig => {
    if (!config) return config;

    // 克隆配置以避免修改原始对象
    const result: ExtendedConfig = { ...config };

    // 检查是否为雷达图 - 雷达图特殊处理
    const isRadarChart = result._originalType === 'radar' ||
        (result.series && Array.isArray(result.series) &&
            result.series.length > 0 && result.series[0]?.type === 'radar');

    if (isRadarChart) {
        console.log('ensureConfigCompleteness检测到雷达图配置，保持type为undefined');
        // 雷达图不设置顶层type
        // 记录原始类型
        result._originalType = 'radar';
    }
    // 确保其他图表类型有type属性
    else if (!result.type) {
        result.type = ChartType.BAR;
    }

    // 根据图表类型添加必要的默认配置
    switch (result.type) {
        case ChartType.LINE:
        case ChartType.BAR:
        case ChartType.SCATTER:
            // 确保直角坐标系图表有基本的坐标轴配置
            if (!result.xAxis && !result.yAxis) {
                result.xAxis = [{ type: 'category' }];
                result.yAxis = [{ type: 'value' }];
            } else {
                // 确保xAxis和yAxis是数组格式
                if (!Array.isArray(result.xAxis)) {
                    result.xAxis = [result.xAxis];
                }
                if (!Array.isArray(result.yAxis)) {
                    result.yAxis = [result.yAxis];
                }
            }
            break;

        case ChartType.PIE:
            // 确保饼图有正确的坐标设置
            if (!result.series || !result.series.length) {
                result.series = [{
                    type: ChartType.PIE,
                    radius: '55%',
                    center: ['50%', '50%']
                }];
            }
            break;

        case ChartType.RADAR:
            // 确保雷达图有indicator配置
            if (!result.radar || !result.radar.indicator) {
                result.radar = {
                    indicator: [
                        { name: '指标1', max: 100 },
                        { name: '指标2', max: 100 },
                        { name: '指标3', max: 100 },
                        { name: '指标4', max: 100 },
                        { name: '指标5', max: 100 }
                    ]
                };
            }

            // 确保雷达图有正确的series配置
            if (!result.series || !Array.isArray(result.series) || result.series.length === 0) {
                result.series = [{
                    type: ChartType.RADAR,
                    data: [] // 空数据，不再使用示例数据
                }];
            } else {
                // 确保每个series都有正确的type
                result.series = result.series.map((series: any) => ({
                    ...series,
                    type: ChartType.RADAR
                }));
            }

            // 删除顶层type属性，避免与series[0].type冲突
            if ('type' in result) {
                delete result.type;
            }
            break;

        case ChartType.GRAPH:
            // 确保关系图有正确的系列配置
            if (!result.series || !Array.isArray(result.series) || result.series.length === 0) {
                result.series = [{
                    type: 'graph', // 使用字符串表示类型，避免类型冲突
                    layout: 'force',
                    symbolSize: 30,
                    roam: true,
                    data: [],
                    links: []
                }];
            } else {
                // 确保每个系列都有正确的type
                result.series = result.series.map((series: any) => ({
                    ...series,
                    type: 'graph' // 使用字符串表示类型，避免类型冲突
                }));
            }

            // 确保系列中有data和links，避免undefined错误
            if (result.series.length > 0) {
                result.series[0].data = result.series[0].data || [];
                result.series[0].links = result.series[0].links || [];

                // 如果data或links为空数组，至少添加一个默认节点
                if (Array.isArray(result.series[0].data) && result.series[0].data.length === 0) {
                    result.series[0].data = [{ id: 'center', name: '中心', symbolSize: 40, value: 0 }];
                }

                // 确保系列类型为graph
                result.series[0].type = 'graph';
            }
            break;

        case ChartType.HEATMAP:
            // 确保热力图有visualMap配置，这是热力图必需的组件
            if (!result.visualMap) {
                // 使用主题颜色或提供默认颜色
                const colors = result.color || ['#313695', '#a50026'];

                // 创建visualMap配置
                result.visualMap = {
                    min: 0,
                    max: 100,
                    calculable: true,
                    orient: 'horizontal',
                    left: 'center',
                    bottom: '15%',
                    inRange: {
                        color: colors.length >= 2 ?
                            [colors[0], colors[1]] :
                            ['#313695', '#a50026']
                    }
                };
            }

            // 热力图需要两个category类型坐标轴
            if (!result.xAxis) {
                result.xAxis = [{ type: 'category' }];
            } else if (!Array.isArray(result.xAxis)) {
                result.xAxis = [result.xAxis];
            }

            if (!result.yAxis) {
                result.yAxis = [{ type: 'category' }];
            } else if (!Array.isArray(result.yAxis)) {
                result.yAxis = [result.yAxis];
            }

            // 确保坐标轴类型为category
            if (result.xAxis[0]) {
                result.xAxis[0].type = 'category';
            }

            if (result.yAxis[0]) {
                result.yAxis[0].type = 'category';
            }
            break;

        case ChartType.BAR_3D:
        case ChartType.SCATTER_3D:
        case ChartType.LINE_3D:
            // 确保3D直角坐标系图表有坐标轴配置
            break;

        default:
            break;
    }

    // 确保2D图表有正确的grid配置
    if (!is3DChartType(result.type) && !result.grid && !isRadar) {
        result.grid = {
            containLabel: true,
            left: '3%',
            right: '4%',
            bottom: '3%',
            top: '3%'
        };
    }

    // 确保有tooltip配置
    if (!result.tooltip) {
        result.tooltip = {
            trigger: isRadar ? 'item' : 'axis'
        };
    }

    // 如果是雷达图，确保有正确的radar配置
    if (isRadar && !result.radar) {
        result.radar = {
            indicator: [], // 使用空数组，不使用模拟指标数据
            shape: 'polygon',
            center: ['50%', '50%'],
            radius: '75%'
        };
    }

    return result;
}; 